<?php
/**
 * Created by PhpStorm.
 * User: dungnt13
 * Date: 11/27/14
 * Time: 3:39 PM
 */

namespace Frontend;

use BaseController,
    Content,
    Sentry,
    Input,
    Lang,
    Tone,
    Topic,
    Lesson,
    App,
    DB,
    Validator,
    Redirect,
    View;

class LessonsController extends BaseController
{
    public function __construct()
    {
        $this->beforeFilter('auth', array('only' => 'getCreate', 'postCreate'));
    }

    public function getIndex()
    {
        $data = array();
        $order = Input::get('order', '');
        $tone = Input::get('tone', '');
        $topic = Input::get('topic', '');
        $category = Input::get('category', '');
        $key = Input::get('key', '');

        switch ($order) {
            case 'views':
                $data['orders']['field'] = 'lessons.views';
                $data['paginate']['appends']['order'] = 'views';
                break;
            case 'thanks':
                $data['orders']['field'] = 'lessons.thanks';
                $data['paginate']['appends']['order'] = 'thanks';
                break;
            default :
                $data['orders']['field'] = 'lessons.id';
                $data['paginate']['appends']['order'] = 'id';
                break;
        }
        $data['orders']['type'] = 'DESC';
        $data['joins'][] = array('table' => 'users', 'pk' => 'users.id', 'fk' => 'lessons.user_id');
        $data['conditions'][] = array('field' => 'lessons.status', 'opr' => '=', 'value' => 'published');
        if ($tone != '') {
            $data['conditions'][] = array('field' => 'lessons.tone_id', 'opr' => '=', 'value' => $tone);
            $data['paginate']['appends']['tone'] = $tone;
        }

        if ($category != '') {
            $data['conditions'][] = array('field' => 'lessons.category_id', 'opr' => '=', 'value' => $category);
            $data['paginate']['appends']['category'] = $category;
        }

//        if ($topic != '') {
//            $data['joins'][] = array('table' => 'topicables', 'pk' => 'lessons.id', 'fk' => 'topicables.lesson_id');
//            $data['conditions'][] = array('field' => 'topicables.topic_id', 'opr' => '=', 'value' => $topic);
//            $data['paginate']['appends']['topic'] = $topic;
//        }

        if ($key != '') {
            $data['conditions'][] = array('field' => 'lessons.title', 'opr' => 'LIKE', 'value' => '%' . $key . '%');
            $data['paginate']['appends']['key'] = $key;
        }

        $myModel = new \MyModel();
        $data['paginate']['nums'] = 20;
        $data['selects'] = array('lessons.*', 'username');
        $data['lessons'] = $myModel->listItems('Lesson', $data);

        $data['tones'] = \Tone::leftJoin('lessons', 'tones.id', '=', 'lessons.tone_id')
            ->select('tones.*', \DB::raw('count(lessons.id) as lessons'))
            ->where('tones.status', '=', 'on')
            ->groupBy('tones.id')
            ->get();

//        $data['topics'] = $myModel->listAllItems('Topic');
//        $data['categories'] = $myModel->listAllItems('Category');
        return View::make('frontend/lessons/index', compact('data'));
    }

    public function getDetails($id, $slug)
    {
        if (is_null($data['lesson'] = Lesson::find($id)))
            return App::abort(404);
        $data['user'] = $data['lesson']->user()->first();
        $data['c_lessons'] = Lesson::where('category_id', '=', $data['lesson']->category_id)
            ->join('users', 'users.id', '=', 'lessons.user_id')
            ->join('categories', 'categories.id', '=', 'lessons.category_id')
            ->select('lessons.title', 'users.username', 'categories.title as category_title')
            ->take(5)->orderBy('lessons.id', 'DESC')->get();
        $data['u_lessons'] = Lesson::join('users', 'users.id', '=', 'lessons.user_id')
            ->leftJoin('categories', 'categories.id', '=', 'lessons.category_id')
            ->where('lessons.user_id', '=', $data['lesson']->user_id)
            ->where('lessons.id', '!=', $id)->take(5)->orderBy('lessons.id', 'DESC')
            ->select('lessons.*', 'users.username', 'categories.title as category_title')
            ->get();
        if ($data['lesson']->level == 0) {
            $data['t_lessons'] = Lesson::where('category_id', '=', $data['lesson']->category_id)
                ->join('users', 'users.id', '=', 'lessons.user_id')->where('lessons.tone_id', '=', $data['lesson']->tone_id)
                ->where('lessons.id', '!=', $id)
                ->select('lessons.*', 'users.username')
                ->orderBy('lessons.id', 'DESC')->take(5)->get();
            return View::make('frontend/lessons/details-no-level', compact('data'));

        }
        return View::make('frontend/lessons/details', compact('data'));
    }

    public function getCreate()
    {
        $data['lesson'] = new \Lesson();
        $data['topics'] = \Topic::returnArray();
        $myModel = new \MyModel();

        $data['categories'] = $myModel->listAllItemsToArray('Category', array('value' => 'id', 'display' => 'title'));
        $data['tones'] = $myModel->listAllItemsToArray('Tone', array('value' => 'id', 'display' => 'title'));
        return View::make('frontend/lessons/create', compact('data'));
    }

    public function postCreate()
    {
        $data = Input::get('data');
        $rules = array('title' => 'required');
        $validation = Validator::make($data['Lesson'], $rules);
        if ($validation->fails())
            return Redirect::back()->withInput()->withErrors($validation);
        $myModel = new \MyModel();

        $data['Lesson']['slug'] = Str::slug($data['Lesson']['title']);
        $data['Lesson']['user_id'] = Sentry::getUser()->id;
        if (!Sentry::getUser()->hasAnyAccess(['lesson', 'lesson.approve']))
            $data['Lesson']['status'] = 'submitted';

        $lesson = $myModel->saveItem('Lesson', $data['Lesson'], array('return' => 'class'));

        if (isset($data['Topics'])) {
            $lesson->topics()->detach();
            $lesson->topics()->attach($data['Topics']);
        }


        if (isset($data['Tags']) && $data['Tags'] != '') {
            $tags = explode(',', $data['Tags']);
            foreach ($tags as $tag) {
                $tag_id = \Tag::Check($tag);
                $lesson->tags()->attach($tag_id);
            }
        }

        if ($lesson->status == 'published')
            return Redirect::route('bai-giang-chi-tiet', array('id' => $lesson->id, 'slug' => $lesson->slug))->with('success', 'Bài giảng của bạn đã được đăng thành công');
        else
            return Redirect::route('bai-giang')->with('success', 'Bài giảng của bạn sẽ được ban quản trị xét duyệt trước khi hiển thị');


    }
} 